'use strict' //开启严格模式

const http = require('http')

let html = `
    <!DOCTYPE html>
    <html>
        <head>
            <title>First Server</title>
        </head>
        <body>
            <div>Node.js in service.</div>
            <div>你好</div>
        </body>
    </html>
`

let routerTable = { //路由
    '/': async(request, response) =>{    //如果url是以‘/’结尾，则执行
        response.setHeader('content-type','text/html; charset=utf-8') //给浏览器的头部传输，说明这个形式是一个html形式，编码类型是uft-8
        response.end(html)

    },

    '/x/y': async(request, response) =>{  //如果url是以‘/x/y’结尾，则执行
        response.end('--- OK ---')
    },

    'x/y/z': async(request, response) =>{ //如果url是以‘x/y/z’结尾，则执行
        let bufferList = []   //空数组
        let totalLength = 0   //传入的字符的长度
    
        request.on('data', chunk => { //在request上绑定一个名为data的属性，chunk是指传入的数据
            totalLength += chunk.length //字符的长度加上新传入的数据的长度
            bufferList.push(chunk) //将chunk放到数组后面
        })
    
        let bodyData = null; //bodyData 是一个空对象，相当于 let bodyData = {}
    
        request.on('end',()=>{ //在request上绑定一个名为end的属性
            if(bufferList.length >0)
                bodyData = Buffer.concat(bufferList, totalLength); //concat 将几个碎片拼接成一个整体
                                        // 数组        数组的长度
            bufferList = [];
    
            if(bodyData) {
                // 判断字符的类型只能传给浏览器的头部
                response.setHeader('content-type','text/plain; charset=utf-8') //给浏览器的头部传输，说明这个形式是一个plain纯文本形式，编码类型是uft-8
                response.end(bodyData)
            } else {
                
                response.end()
            }
        })        

    }
}

let serv = http.createServer((request, response) =>{

    if(routerTable[request.url]===undefined){
        response.statusCode = 404   // 状态码
        response.end('page not found')
        return
    }

    routerTable[ request.url ](request, response)
    //routerTable中想要请求的url

    // console.log(request.url, request.headers, request.method);
    // if(request.url !== '/x/y/z') {
    //     response.statusCode = 404   // 状态码
    //     response.end('page not found')
    //     return
    // }



    /*git bash                    
      打开火狐 http://localhost:3456/    
      控制台后，【网络】--点击状态200 --【消息头】--【响应头】里面有写入的这一句    */             
    // response.end(html)
})

serv.listen(3456) // 3456是端口号
